在傳統的php寫法中,html裡面混著各種php的邏輯語法,還有資料庫語法等等,這邊主要介紹的是laravel是怎麼切出view還有樣板引擎blade該怎麼使用,你就可以脫離各種語法混在一起的地獄了。
在前幾天介紹route的時候,回傳view的檔案都是放在route的閉包裡面,已經介紹過controller了,就可以把view移到controller裡面去了,route就讓他專門做route的事,邏輯部分就都移到controller裡面去做就可以了。
先來新增一個新的view檔案,view檔案的路徑resources/views,新增一個叫hello.blade.php的檔案,除了要加上php外,記得還要加上blade,這樣laravel才能辨識該檔案
// path resources/views
// hello.blade.php
<!doctype html>
<html>
<head>
<title>Laravel</title>
<!-- Styles -->
<style>
</style>
</head>
<body>
<h1>hello world</h1>
</body>
</html>
在昨天的NewsController裡面加上一個hello Function還有回傳view檔案。
// Http/Controllers/NewsController.php
public function hello(){
return view('hello');
}
在route中新增一個router,這時候就可以到網頁上去測試看看有沒有跑出hello world來。
// path routes/web.php
Route::get('/hello','NewsController@hello');
上面已經在controller裡面抓到view了,現在來試試看把query值傳進view裡面顯示出來。
// path routes/web.php
Route::get('/news/{id}','NewsController@show_id')
下面兩種方法都可以把變數傳進去
// Http/Controllers/NewsController.php
public function show_id($id){
//第一種傳變數進view的方法
return view('hello')->with('id',$id);
//第二種方法
return view('hello',compact('id',$id));
}
變數要傳進view必須用兩組大括號包起來,這樣才能抓到變數的值
// path resources/views
// hello.blade.php
<!doctype html>
<html lang="{{ app()->getLocale() }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel</title>
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">
<!-- Styles -->
<style>
</style>
</head>
<body>
<div class="container">
<!--變數必須用大括號包起來 -->
<h1>news_id:{{$id}}</h1>
</div>
</body>
</html>
接著在網址打上:http://127.0.0.1:8000/new/2 ,試試看有沒有印出query的值,以上就是今天view介紹囉
oliver大大~
Route::get('/news/{id}','NewsController@show_id')
在網址打上:http://127.0.0.1:8000/new/2
-> 這個地方應該是 http://127.0.0.1:8000/news/2
Route::get('/news/{id}','NewsController@show_id')
宣告會與
Route::resource('news','NewsController');
所自動產生出來的
Route::get('/news/{id}','NewsController@show');
動作衝突
使得輸入 http://127.0.0.1:8000/news/2 後
會輸出 『最新消息2』
若如最後的URL所述是 http://127.0.0.1:8000/new/2 的話
則在 web.php 中的宣告應該是
Route::get('/new/{id}','NewsController@show_id');